#ifndef RPC_ERROR_HPP
#define RPC_ERROR_HPP

#include <rpc/clnt.h>
#include <string>
#include <boost/system/system_error.hpp>

namespace bs=boost::system;

namespace rpc_error{

class rpc_error : public bs::system_error{
public:
	template <typename ...Args>
	rpc_error(Args... args) : bs::system_error(args...) {};
};

typedef clnt_stat rpc_enum_t;

class rpc_category : public bs::error_category{
	const char *m_name;
public:
	rpc_category(const char *p_name);
private:
	const char *name() const;
	std::string message(int ev) const;
};

extern rpc_category g_rpc_category;

bs::error_code make_error_code(rpc_enum_t e);

bs::error_condition make_error_condition(rpc_enum_t e);

}

namespace boost{
namespace system{
template<> struct is_error_code_enum<rpc_error::rpc_enum_t> { static const bool value = true; };
}
}

#endif /* #ifndef RPC_ERROR_HPP */
